package com.sangeng.controller;

import com.sangeng.domain.ResponseResult;
import com.sangeng.domain.dto.RoleAddDto;
import com.sangeng.domain.dto.RoleDto;
import com.sangeng.domain.dto.RoleUpdateDto;
import com.sangeng.domain.entity.Role;
import com.sangeng.domain.vo.PageVo;
import com.sangeng.domain.vo.RoleUpdateVo;
import com.sangeng.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/system/role")
public class RoleController {
    @Autowired
    private RoleService roleService;

    /**
     * 查询角色列表
     * @param pageNum
     * @param pageSize
     * @param roleName
     * @param status
     * @return
     */
    @GetMapping("/list")
    public ResponseResult<PageVo> listAll(Integer pageNum,Integer pageSize,
                                          String roleName,Character status){
        return roleService.listAll(pageNum,pageSize,roleName,status);
    }

    /**
     * 修改角色的状态
     * @param roleUpdateDto
     * @return
     */
    @PutMapping("/changeStatus")
    public ResponseResult changeRoleStatus(@RequestBody RoleUpdateDto roleUpdateDto){
        return roleService.changeRoleStatus(roleUpdateDto);
    }

    /**
     * 需要提供新增角色的功能。新增角色时能够直接设置角色所关联的菜单权限。
     * @param roleAddDto
     * @return
     */
    @PostMapping
    public ResponseResult saveRole(@RequestBody RoleAddDto roleAddDto){

        return roleService.saveRole(roleAddDto);
    }

    /**
     * 根据角色id查询角色详情
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public ResponseResult<RoleUpdateVo> getDataById(@PathVariable Long id){
        return roleService.getDataById(id);
    }

    /**
     * 更新用户信息
     * @param roleDto
     * @return
     */
    @PutMapping
    public ResponseResult updateData(@RequestBody RoleDto roleDto){
        return roleService.updateData(roleDto);
    }

    /**
     * 根据角色id删除数据
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public ResponseResult deleteDataById(@PathVariable Long id){

        return roleService.deleteDataById(id);
    }

    /**
     * 获取所有状态正常的角色列表
     * @return
     */
    @GetMapping("/listAllRole")
    public ResponseResult<List<Role>> getAllRole(){
        return roleService.getAllRole();
    }
}
